package com.itheima.controller;

import com.itheima.pojo.Result;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@RestController
@Slf4j
@RequestMapping("/login")
public class LoginController {


    @Autowired
    private UserService userService;

    /**
     * 登录操作的基本实现
     */
//    @PostMapping
//    public Result login1(@RequestBody User user) {
//
//        //调用service完成登录操作
//        User loginUser = userService.login(user);
//
//        //判断是否登录成功
//        if (loginUser == null) {
//            return Result.error("对不起，您的用户名或密码有误！");
//        } else {
//            return Result.success("登录成功！");
//        }
//    }


    /**
     * 观察session与cookie的登录方法
     * <p>
     * Controller中只要获取Session对象,Tomcat就会自动创建SessionID返回给浏览器,此后浏览器再次请求将会带着本次会话的SessionID
     * <p>
     * 如果想让session对象出现，则直接在方法的参数位置定义HttpSession参数，在方法体中使用该session即可,而session对象通常存在于请求对象HttpServletRequest中的,所以形参中定义了一个HttpServletRequest参数
     * session.setAttribute(键,值);  向session存储数据
     * session.getAttribute(键);从session中获取数据
     */
//    @PostMapping
//    public Result login2(@RequestBody User user, HttpServletRequest request) {
//
//        HttpSession session = request.getSession();//获取session
//
//        log.info("新建的session:{}", session);
//        session.setAttribute("NAME", "zs");
//        Object name = session.getAttribute("NAME");
//        System.err.println(name);
//
//        /*
//        设置了SessionID后浏览器的响应头中出现了Set-Cookie:JSESSIONID=349164333E06B39A53AECBFC845C9391; Path=/; HttpOnly
//        再次访问其他url时该SessionID将会出现在请求头中,直到本次会话结束(浏览器或服务器关闭)
//        */
//        //调用service完成登录操作
//        User loginUser = userService.login(user);
//
//        //判断是否登录成功
//        if (loginUser == null) {
//            return Result.error("对不起，您的用户名或密码有误！");
//        } else {
//            return Result.success("登录成功！");
//        }
//    }


    /**
     * 带登录校验的登录
     */
    @PostMapping
    public Result login3(@RequestBody User user, HttpServletRequest request) {

        HttpSession session = request.getSession();

        //调用service完成登录操作
        User loginUser = userService.login(user);

        //判断是否登录成功
        if (loginUser == null) {
            return Result.error("对不起，您的用户名或密码有误！");
        } else {

            session.setAttribute("loginUser", loginUser);//当登录成功之后,向session存储键值对(loginUser:Service层返回的loginUser对象)

            return Result.success("登录成功！");
        }
    }

}
